from django.shortcuts import redirect
from django.utils.deprecation import MiddlewareMixin


class ConfirmLoginMiddleware(MiddlewareMixin):
    """
    登录确认中间件，用于检查用户访问请求是否已登录，以及根据登录状态重定向到相应页面。

    方法:
    - process_request: 在请求处理之前调用，用于检查用户登录状态并进行重定向。
    - process_response: 在响应返回之前调用，但本中间件中未进行任何处理。
    """

    def process_request(self, request):
        """
        检查用户请求时的登录状态，并根据状态进行重定向。

        参数:
        - request: HttpRequest对象，包含客户端发来的HTTP请求信息。

        返回值:
        - 如果用户未登录且访问了需要登录才能访问的页面，则重定向到登录页；否则不返回任何内容。
        """
        user_status = request.COOKIES.get('user_status')  # 从cookie中获取用户登录状态
        path = request.path  # 获取请求的路径
        allow_path = ['/user/login/', '/user/register/']  # 定义无需登录即可访问的路径列表
        print(f'{path = }')  # 打印请求路径，用于调试

        # 检查用户是否未登录且尝试访问需要登录的页面，如果是，则重定向到登录页
        if user_status != '1' and path not in allow_path:
            return redirect('user:login')

        # 检查已登录用户是否尝试访问首页，如果是，则重定向到用户首页
        if user_status == '1' and path in ['/']:
            return redirect('user:index')

    def process_response(self, request, response):
        """
        在响应返回前进行处理，本中间件中未进行任何额外处理，直接返回响应。

        参数:
        - request: HttpRequest对象，包含客户端发来的HTTP请求信息。
        - response: HttpResponse对象，包含服务器返回的HTTP响应信息。

        返回值:
        - response: 原始或未经修改的HttpResponse对象。
        """
        return response

